package com.schoolhelper.task.scheduler;

import com.schoolhelper.task.service.TaskOrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 任务调度器
 * 负责定时处理任务相关的后台任务
 */
@Component
public class TaskExpiredScheduler {
    
    private static final Logger logger = LoggerFactory.getLogger(TaskExpiredScheduler.class);
    
    @Autowired
    private TaskOrderService taskOrderService;
    
    /**
     * 定时处理过期任务
     * 每2.5分钟执行一次，将过期的待接单任务状态更新为已取消
     */
    @Scheduled(fixedRate = 150000) // 2.5分钟 = 300000毫秒
    public void handleExpiredTasks() {
        try {
            logger.info("定时任务开始：处理过期任务");
            int updatedCount = taskOrderService.handleExpiredTasks();
            if (updatedCount > 0) {
                logger.info("定时任务完成：成功处理了 {} 个过期任务", updatedCount);
            } else {
                logger.debug("定时任务完成：没有发现过期任务");
            }
        } catch (Exception e) {
            logger.error("处理过期任务时发生错误", e);
        }
    }
    
    /**
     * 每天凌晨2点执行一次过期任务清理
     * 作为备用清理机制
     */
    @Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2点
    public void dailyExpiredTasksCleanup() {
        try {
            logger.info("每日定时任务开始：清理过期任务");
            int updatedCount = taskOrderService.handleExpiredTasks();
            logger.info("每日定时任务完成：处理了 {} 个过期任务", updatedCount);
        } catch (Exception e) {
            logger.error("每日清理过期任务时发生错误", e);
        }
    }
}